/**
 * 发送get请求
 * @param {String} url                   请求地址
 * @param {Object} params                请求参数   参数名=参数值&参数名=参数值
 * @param {Object} headers               请求头
 * @param {String/Undefined} dataType    返回的数据类型
 */

function get(url,params,headers = {},dataType){
    return new Promise((resolve,reject) => {
        // 一、创建xhr对象
        const xhr = new XMLHttpRequest
        // 二、监听请求状态
        xhr.onreadystatechange = () => {
            // 判断后端是否返回数据
            if(xhr.readyState === 4){
                // 判断请求状态
                if(xhr.status === 200){
                    let res = xhr.responseText
                    if(dataType === 'json') res = JSON.parse(res)
                    // 不同逻辑处理用函数
                    resolve(res)
                } else{
                    reject(xhr.status)
                    // console.log('失败：',xhr.status);
                }
            }
        }
        // 三、设置请求方式、请求地址
        // 参数params【此时是一个对象，如{a:1,b:2}】转化为字符串类型，中间用&连接【如，a=1&b=2】
        // 步骤：
        // 1、定义一个空数组
        let temp = []
        // 2、遍历对象,将对象的值push到数组中去
        for(let key in params){
            temp.push(`${key}=${params[key]}`)
        }
        // 3、将数组转化为字符串，用&分隔
        xhr.open('get',`${url}?${temp.join('&')}`)

        // 设置请求头
        for(let key in headers){
            xhr.setRequestHeader(key,headers[key])
        }

        // 四、发送请求
        xhr.send(null)
    })
    
}


/**
 * 发送post请求
 * @param {String} url                   请求地址
 * @param {Object} params                请求参数   参数名=参数值&参数名=参数值
 * @param {Object} headers               请求头
 * @param {String/Undefined} dataType    返回的数据类型
 */

 function post(url,params,headers = {},dataType){
    return new Promise((resolve,reject) => {
        // 一、创建xhr对象
        const xhr = new XMLHttpRequest
        // 二、监听请求状态
        xhr.onreadystatechange = () => {
            // 判断后端是否返回数据
            if(xhr.readyState === 4){
                // 判断请求状态
                if(xhr.status === 200){
                    let res = xhr.responseText
                    if(dataType === 'json') res = JSON.parse(res)
                    // 不同逻辑处理用函数
                    resolve(res)
                } else{
                    reject(xhr.status)
                    // console.log('失败：',xhr.status);
                }
            }
        }
        // 三、设置请求方式、请求地址
        xhr.open('post',url)

        // 设置请求头
        for(let key in headers){
            xhr.setRequestHeader(key,headers[key])
        }

        xhr.setRequestHeader('content-type','application/x-www-form-urlencoded')

        // 四、发送请求
        // 参数params【此时是一个对象，如{a:1,b:2}】转化为字符串类型，中间用&连接【如，a=1&b=2】
        // 步骤：
        // 1、定义一个空数组
        let temp = []
        // 2、遍历对象,将对象的值push到数组中去
        for(let key in params){
            temp.push(`${key}=${params[key]}`)
        }
        // 3、将数组转化为字符串，用&分隔
        xhr.send(temp.join('&'))
    })
    
}
export {get,post}